const webpack = require('webpack');
let {appSrc} = require('./paths');
// js格式校验
const ESLintPlugin = require('eslint-webpack-plugin');
// css、scss样式校验
// npm i stylelint stylelint-webpack-plugin -D
// const StylelintPlugin = require('stylelint-webpack-plugin');
// .vue
let VueLoaderPlugin = require('vue-loader/lib/plugin');
module.exports = {
    // entry: { app: resolveApp('src/index.js') },
    resolve: {
        modules: [appSrc, 'node_modules'],
        extensions: ['.js', '.jsx','.ts', '.tsx', '.json', '.vue', '.css', '.scss', '.less'],
        alias: {
            '@': appSrc,
            // assets: resolveApp('/src/assets/'),
            // utils: resolveApp('/src/utils'),
            // api: resolveApp(__dirname, '/src/api'),
            'vue$': 'vue/dist/vue.esm.js',
            // 'vue$': 'vue/dist/vue.runtime.esm.js', // @vue/cli默认配置
        }
    },
    module: {
        // 加快解析速速
        noParse: /^(vue|vue-router|vuex|vuex-router-sync|react|react-dom|react-router-dom)$/,
        rules: [
            {
                // test: /\.(js|jsx)$/,
                test: /\.(js|jsx|ts|tsx)$/,
                // loader: 'babel-loader',
                use: [
                    {
                        loader: 'babel-loader',
                        // cacheDirectory: true, // 开启缓存
                        options: {
                            // presets: [ '@babel/preset-env' ] // babel.config.js已配置
                        }
                    }
                ],
                exclude: /node_modules/,
                include: [appSrc]
            },
            {
                test: /\.vue$/,
                use: ['vue-loader']
            },
        ]
    },
    plugins: [
        new VueLoaderPlugin(),
        new webpack.DefinePlugin({
            'API_BASE_URL': JSON.stringify('https://api.example.com'),
            // @vue/cli中的BASE_URL配置
            // 'process.env': {
            //     // NODE_ENV: '"production"',
            //     BASE_URL: '"/"'
            // }
        }),
        // elinst校验，替代旧的eslint-loader
        new ESLintPlugin({
            exclude: ['node_modules'],
            // files: ['.', 'src', 'config'],
            // // formatter: 'table',
            extensions: ['.js', '.jsx', '.ts', '.tsx', '.vue'], // 添加对.vue的校验，默认只支持js后缀
            emitError: true, // 发射错误信息
            emitWarning: true, // 发射告警信息
            // 只有在mode为'production'时，当出现eslint错误时，构建才会fail。
            // https://github.com/webpack-contrib/eslint-webpack-plugin/issues/51#issuecomment-768213066
            failOnError: true, // 默认true，出现eslint error的时候，构建fail。
            // failOnWarning: true, // 默认false，出现eslint warning的时候，构建fail。
        }),
        // new StylelintPlugin(),
    ]
}